package com.itheima.reggie.common;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;


/**
 * 所以逇异常到抛到表现层处理
 * 全局异常处理类：底层是基于aop实现的，它会拦截所有controller的方法
 * 好处：我们就不用在代码里面去捕获处理异常了，我们直接都抛到这里来统一处理
 */
//意思就是拦截使用括号中注解的controller，只要controller中使用下面两个注解中的一个就会被拦截到

@ControllerAdvice(annotations = {RestController.class, Controller.class})
@ResponseBody
@Slf4j
public class GlobalExceptionHandler {
    /**
     * 异常处理方法
     * @return
     */
    //定义要处理的异常类型，这里直接处理所有异常
    @ExceptionHandler(Exception.class)
    public R<String> exceptionHandler(Exception e){
        //打印报错信息
        log.error(e.getMessage());
        //返回错误信息
        return R.error("系统繁忙，请稍后再试...");
    }



}
